#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//1

//int main()
//{
//	printf("hehe\n");
//	main();
//	return 0;
//}

//2  算n!

//int Fact(int n)
//{
//	if (n == 0)
//	{
//		return 1;
//	}
//	else if (n > 0)
//	{
//		return n * Fact(n - 1);
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = Fact(n);
//	printf("%d\n", r);
//	return 0;
//}

////用迭代里的循环方式
//int Fact(int n)
//{
//	int i = 0;
//	int ret = 1;
//	for (i = 1;i <= n;i++)
//	{
//		ret *= i;//ret=ret*i
//	}
//	return ret;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r= Fact(n);
//	printf("%d\n",r);
//	return 0;
//}

//3  打印数字每位

//void Print(int n)
//{
//	if (n > 9)
//		Print(n / 10);
//	printf("%d ", n%10);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	Print(n);
//	return 0;
//}

//4  青蛙跳台

////递归
//int count = 0;
//int Fib(int n)
//{
//	if (n == 3)
//		count++;//函数定义也是从上往下读,如果int count放后面就错了
//	if (n <= 2)
//		return 1;
//	else
//		return Fib(n - 1) + Fib(n - 2);//n=40完成40次调用后开始return释放空间，每次每都同种已释放的空间都大于接下来要调用的空间都没事全没事
//}
////int count = 0;error
//
//////迭代
////int Fib(int n)
////{
////	int a = 1;
////	int b = 1;
////	int c = 1;
////	while (n > 2)
////	{
////		c = a + b;
////		a = b;
////		b = c;
////		n--;
////	}
////	return c;
////}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = Fib(n);
//	printf("%d\n", r);
//	printf("%d\n", count);
//	return 0;
//}

//5

//int main()
//{
//	printf("hehe\n");
//
//return 0;//return就出来了
//printf("hello\n");
//}

//6  汉诺塔

///*
//1:  A——>C
//2:  A——>B    A——>C    B——>C
//3:  A——>C  A——>B  C——>B    A——>C    B——>A  B——>C  A——>C
//*/
//void move(char pos1, char pos2)
//{
//	printf(" %c——>%c ", pos1, pos2);
//}
//void Hanoi(int n, char pos1, char pos2, char pos3)
//{       //     2         B           A         C
//	if (n == 1)
//	{
//		move(pos1, pos3);
//	}
//	else
//	{
//		Hanoi(n - 1, pos1, pos3, pos2);
//		move(pos1, pos3);
//		Hanoi(n - 1, pos2, pos1, pos3);
//	}
//}//计算机也不知道汉诺塔是什么，只是机械地照做，只是这样做符合所谓的预期
///*
//如果有多个，最后倒两种步一定是A——>C
//*/
//int main()
//{
//	Hanoi(1, 'A', 'B', 'C');
//	printf("\n");
//	Hanoi(2, 'A', 'B', 'C');
//	printf("\n");
//	Hanoi(3, 'A', 'B', 'C');
//	printf("\n");
//	return 0;
//}


//7
//最后指定位置的阶乘与指前位置阶乘的关系，用最后指定位置的阶乘 = 前指定位置阶乘*/表达式算
//Fact(n)已经意义为n!了


// int Fact(int n)//就像是列数学公式，1<=n<=10
// {
//     if (n == 1)
//         return 1;
//     else//(2<=n<=10)写不写都一样
//     //等于
//         return n * Fact(n - 1);
// }
// #include<stdio.h>
// int main()
// {
//     int n;
//     scanf("%d", &n);
//     printf("%d", Fact(n));
//     return 0;
// }